#ifndef __AD7793_H
#define __AD7793_H

#include "stm32f10x.h"

// AD7793寄存器地址定义
#define AD7793_REG_COMM        0x00    // 通信寄存器
#define AD7793_REG_STATUS     0x00    // 状态寄存器
#define AD7793_REG_MODE       0x08    // 模式寄存器
#define AD7793_REG_CONF       0x10    // 配置寄存器
#define AD7793_REG_DATA       0x58    // 数据寄存器
#define AD7793_REG_ID         0x60    // ID寄存器
#define AD7793_REG_IO         0x68    // IO寄存器
#define AD7793_REG_OFFSET     0x70    // 偏移寄存器
#define AD7793_REG_FULLSCALE  0x78    // 满量程寄存器

// AD7793模式寄存器位定义
#define AD7793_MODE_SEL(x)    ((x) << 13)
#define AD7793_MODE_CLKSRC(x) ((x) << 12)
#define AD7793_MODE_RATE(x)   ((x) << 5)
#define AD7793_MODE_FILTER(x) ((x) << 2)
#define AD7793_MODE_BUF      (1 << 1)
#define AD7793_MODE_BO       (1 << 0)

// AD7793配置寄存器位定义
#define AD7793_CONF_BOOST    (1 << 8)
#define AD7793_CONF_GAIN(x)  ((x) << 8)
#define AD7793_CONF_REFSEL(x) ((x) << 6)
#define AD7793_CONF_BUF     (1 << 4)
#define AD7793_CONF_BO     (1 << 3)
#define AD7793_CONF_UNIPOLAR (1 << 2)
#define AD7793_CONF_BURN    (1 << 1)
#define AD7793_CONF_CHAN(x) ((x) << 0)

// AD7793通道选择
#define AD7793_CH_AIN1P_AIN1M    0x00
#define AD7793_CH_AIN2P_AIN2M    0x01
#define AD7793_CH_AIN3P_AIN3M    0x02
#define AD7793_CH_AIN1M_AIN1M    0x03
#define AD7793_CH_TEMP           0x06
#define AD7793_CH_AVDD_MONITOR   0x07

// AD7793增益设置
#define AD7793_GAIN_1            0x00
#define AD7793_GAIN_2            0x01
#define AD7793_GAIN_4            0x02
#define AD7793_GAIN_8            0x03
#define AD7793_GAIN_16           0x04
#define AD7793_GAIN_32           0x05
#define AD7793_GAIN_64           0x06
#define AD7793_GAIN_128          0x07

// AD7793更新率设置
#define AD7793_RATE_470          0x00
#define AD7793_RATE_242          0x01
#define AD7793_RATE_123          0x02
#define AD7793_RATE_62           0x03
#define AD7793_RATE_50           0x04
#define AD7793_RATE_39           0x05
#define AD7793_RATE_33_2         0x06
#define AD7793_RATE_19_6         0x07
#define AD7793_RATE_16_7         0x08
#define AD7793_RATE_16_5         0x09
#define AD7793_RATE_13_1         0x0A
#define AD7793_RATE_9_8          0x0B
#define AD7793_RATE_8_33         0x0C
#define AD7793_RATE_6_25         0x0D
#define AD7793_RATE_4_17         0x0E
#define AD7793_RATE_3_33         0x0F

// AD7793引脚定义（使用硬件SPI1）
#define AD7793_CS_PORT           GPIOA
#define AD7793_CS_PIN            GPIO_Pin_4
#define AD7793_SCLK_PORT         GPIOA
#define AD7793_SCLK_PIN          GPIO_Pin_5
#define AD7793_SDI_PORT          GPIOA
#define AD7793_SDI_PIN           GPIO_Pin_6
#define AD7793_SDO_PORT          GPIOA
#define AD7793_SDO_PIN           GPIO_Pin_7
#define AD7793_DRDY_PORT         GPIOA
#define AD7793_DRDY_PIN          GPIO_Pin_3

// AD7793寄存器地址（8位操作）
#define AD7793_REG_IO           0x28    // IO寄存器
#define AD7793_REG_CONF         0x10    // 配置寄存器
#define AD7793_REG_MODE         0x08    // 模式寄存器
#define AD7793_REG_DATA         0x58    // 数据寄存器
#define AD7793_REG_ID           0x60    // ID寄存器
#define AD7793_REG_OFFSET       0x70    // 偏移寄存器
#define AD7793_REG_FULLSCALE    0x78    // 满量程寄存器

// 函数声明
void AD7793_Init(void);
void AD7793_Reset(void);
void AD7793_WriteByte(uint8_t data);
uint32_t AD7793_ReadData(void);
uint8_t AD7793_ReadByte(void);
uint8_t AD7793_DataReady(void);
uint8_t AD7793_GetID(void);
void AD7793_ThermocoupleInit(void);
void AD7793_PT100Init(void);
float AD7793_GetThermocoupleValue(void);
float AD7793_GetPT100Temperature(void);

// 调试函数
uint32_t AD7793_ReadRawData(void);
void AD7793_TestSPI(void);

#endif
